\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{ifpdf}
\usepackage{graphicx}
\renewcommand{\familydefault}{\sfdefault}

\marginparwidth 0pt
\oddsidemargin  0pt
\evensidemargin  0pt
\marginparsep 0pt
\topmargin   0pt

\textwidth   6.5in
\textheight  8.5 in

\title{Rapport de projet base de données : Thésaurus}
\author{BENGHABRIT Walid \and BOLLINI Kevin \and MÉLIA Geoffrey \and RAHMANI Lokman  \and PAGÈS Julien \and SALEIL Baptiste}
\date{\today}
\ifpdf
	\pdfinfo 
	{
		/Author (Benghabrit - Bollini - Mélia - Pagès - Saleil)
		/Title (Rapport de projet)
		/Subject (Thesaurus)
		/Keywords ()
		/CreationDate (\today)
	}
\fi

%A l’issue du projet, vous devez établir un rapport clair et concis relatant les phases de travail, l’organisation du travail
% en termes de planification et de groupes, les résultats et difficultés rencontrées et une conclusion

\begin{document}
	% Page de titre
	\maketitle
	\thispagestyle{empty}
	\newpage
	
	% Page vide
	
	\thispagestyle{empty}
	\newpage
	
	% Sommaire
	\tableofcontents
	
	\chapter{Introduction}	
		\section{Contexte}
		Ce rapport traite du travail de six étudiants en Master 1 d'Informatique à l'Université Montpellier II sur un projet de Base de Données. Proposé dans le cadre du module du même nom, ce projet a pour objectif de former les étudiants sur différents aspects :
		\begin{itemize}
			\item{Généraux et organisationnels} : Dans leur objectif d'atteindre un poste d'ingénieur ou de chef de projet, la réalisation de ce projet par les étudiants est une opportunité de s'entrainer au 				travail en groupe, à l'organisation, à la communication et à l'utilisation des outils que cela nécessite.
			\item{Techniques} : Défini dans le cadre du module de Base de Données, ce projet est aussi l'occasion de mettre en pratique les apprentissages vus en cours, particulièrement sur les bases de données de type Objet-Relationnel. Nous verrons plus loin dans ce document dans quelle mesure exactement.
		\end{itemize}
		 
		\section{Sujet}
		L'objectif de ce projet est de mettre en place une application permettant de constituer, mettre à jour et consulter un dictionnaire partagé, aussi appelé thésaurus. Idéalement, à la vue de l'importance que prend actuellement l'internet dans la société, l'application proposera une interface web permettant d'effectivement réaliser ces fonctions. \paragraph{}
		La notion de thésaurus n'étant pas équivoque pour tout un chacun et des différences et subtilités existant parmi les diverses définitions que nous avons pu trouver, nous allons ici commencer par donner la définition de thésaurus qui sera considérée dans le reste de ce document. Certaines de ces précisions sont d'autant plus importantes qu'elles influent sur la conception même de l'application considérée. \paragraph{}
	Un thésaurus est une liste organisée, souvent par ordre alphabétique, de termes représentant les concepts d'un domaine de la connaissance. Ces thésaurus sont généralement utilisés pour l'indexation et la recherche de ressources documentaires dans des applications informatiques spécialisées. Les termes (par exemple : agriculture, jachère, labourage) sont reliés entre eux par des relations de synonymie (terme équivalent ; ex : labour => labourage), de hiérarchie (terme générique et terme spécifique) et d'association (terme associé); chaque terme appartient à une catégorie ou domaine.\paragraph{}
	Comme les exemples ci-dessus le laissent penser, nous avons décidé de créer notre thésaurus autours du thème des cultures, et particulièrement de l'agriculture.
		
	
		\newpage
		\section{Choix stratégiques}
	L'application est divisée en deux parties majeures. \\
			\subsection{Interface Graphique}
			Pour les raisons précédemment évoquées, nous avons opté pour une interface web en créant un site internet. Il sert d'interface entre les utilisateurs (et les administrateurs) et la base de données du thésaurus. Le site est lui-même constitué de deux parties principales : \\
	La première	correspond à toutes les fonctionnalités que peut s'attendre à trouver l'utilisateur ou le visiteur du site. C'est-à-dire pouvoir effectuer des recherches sur le thésaurus, le parcourir, le découvrir, y naviguer, etc. Bref, trouver l'information qu'il est venu chercher. \\
	La seconde est quant à elle invisible pour l'utilisateur lambda du site. Elle correspond en effet à toute la partie administration et maintenance du thésaurus. Ici, le ou les administrateurs peuvent enrichir le thésaurus (en accédant à la base de données), le mettre à jour, ou encore éventuellement en créer de nouveaux.
	
		\subsection{Base de Données}
		Pour gérer les données du thésaurus, nous avons utilisé PostgreSQL. C'est un SGBD objet-relationnel basé sur POSTGRES développé par le Professeur Michael Stonebraker à l'université de Californie au département des sciences informatiques de Berkeley. Il supporte une grande partie du standard SQL:2003 tout en offrant de nombreuses fonctionnalités modernes. Grâce à sa licence libérale, PostgreSQL peut être utilisé, modifié et distribué par tout le monde gratuitement et librement quelque soit le but visé, qu'il soit privé, commercial ou académique. \paragraph{}

De plus PostgreSQL peut être étendu par l'utilisateur de multiples façons. Il est ainsi possible d'ajouter : 
	\begin{itemize}
		\item{de nouveaux types de données}
		\item{de nouvelles fonctions}
		\item{de nouveaux opérateurs}
		\item{de nouvelles fonctions d'agrégat}
		\item{de nouvelles méthodes d'indexage}
		\item{de nouveaux langages de procédure}
	\end{itemize}
		
	\newpage	
	\chapter{Analyse et conception}
	Comme tout projet de taille relativement conséquente, une phase d'analyse et de conception se révèle indispensable au bon déroulement et à la réalisation intégrale du projet. Dans cette partie, nous parlerons des outils qui nous ont été nécessaires à tous les points de vue, de la manière dont nous avons mené ce travail en groupe, et enfin plus précisemment du résultat de l'analyse et de la conception effectuées pour la réalisation de ce thésaurus.
		\section{Outils}
		Ils sont la base de tout travail. C'est grâce à ces différents outils qu'il nous est possible de communiquer efficacement, de concevoir, de développer, de partager notre travail, etc. Chaque outil a ses propres fonctions, et s'il en existe souvent plusieurs répondant à des besoins identiques, nous préciseront bien sur lesquels nous avons utilisés. \newline
		Tout d'abord, ce projet étant un travail à réaliser sur plus d'un mois dans un groupe de six étudiants, une des exigences majeures que nous avons définies est la communication entre chacun des membres. Nous pensons qu'il est indipensable d'assurer une communication rapide et efficace afin de partager au mieux les opinions et les idées de chacun, d'anticiper les problèmes ou de rapidement les résoudre ou encore de partager son travail. Pour cela, nous avons bien sur échangé nos emails mais aussi et surtout porté notre projet sur un gestionnaire de versions SVN.
		 Couplé à un partage de documents via GoogleDocs, l'utilisation du SVN (de GoogleCode) permet à chaque membre d'accéder à l'intégralité du travail de tout le monde (préalablement envoyé sur le SVN).
		  Il est ainsi plus aisé de se rendre compte de l'avancement global du projet et de travailler sur la dernière version.
		  De plus cela permets aussi de lier les différentes parties entre elles ou encore d'intervenir ou réagir sur une mise à jour du travail de quelqu'un. \newline
		 \paragraph{Outils utilisés} 
		\begin{itemize}
		\item UML pour toute la partie analyse, car c'est un langage standard particulièrement adapté dans le cadre de la conception objet.
		\item Umbrello pour l'uml. C'est un logiciel libre et suffisamment complet pour répondre à nos besoins.
		\item PostgreSQL pour la base de données car c'est un SGBD libre et très efficace, couplé à PHP pour l'exploitation des données sur le site.
		\item EntrepriseDB : un paquet contenant de nombreux outils pour le developpement des bases de donnees avec postgres : serveur, outils d’administration graphique, outils de sauvegarde, etc.
		\item Les nouvelles technologies du web pour l'interface graphique : HTML5, CSS3, Javascript et jquery, Ajax.
		\item Latex pour le rapport, pour la qualité du rendu ainsi que la portabilité.
		\item Pour la gestion de projet, des réunions régulières ainsi que GantProject pour le diagramme de Gantt (le rétro-planning).
		\end{itemize}
		
		\newpage
		\section{Gestion du projet}
		En premier lieu, nous avons évidemment commencé par une phase de compréhension et d'assimilation du sujet. Bien comprendre les spécifications demandées, les résultats attendus ou les impératifs de programmation comme l'utilisation d'une base de données objet-relationnel. Notre groupe résultant de la fusion de deux autres, il nous a fallu rediscuter ces différents points entre nous afin d'arriver à une compréhension commune du sujet.
		\paragraph{} Une fois mis d'accord sur notre vision de l'application, nous sommes rentrés dans la phase d'analyse à proprement parler. Les résultats, présentés dans la partie 'Analyse', ont servi de socle à tous les travaux et reflexions. La conception de la base de données, notamment, s'appuie sur le diagramme de classes afin de répondre correctement aux besoins et contraintes déclarés dans les différents diagrammes de cas d'utilisation.
		\paragraph{} Nous avons tout d'abord envisagé d'utiliser le système "d'extreme programming" pour la réalisation ce de projet. L'objectif était d'avoir le plus rapidement possible une version fonctionnelle puis de l'agrémenter de nouvelles fonctions au fur et à mesure. Dans la pratique, il s'est avéré qu'il était difficile d'avoir rapidement une liaison entre l'interface et la base de données, et que l'extreme programming n'était donc pas adapté. Nous nous sommes donc raprochés d'une autre méthode AGILE : MACAO (Méthode d'Analyse et de Conception d'Applications Orientées Objet). Cette méthode répondant en effet aux besoins que nous avions : 
		\begin{itemize}
			\item définir l'IHM la mieux adaptée aux besoins des utilisateurs,
			\item développer des programmes orientés-objets fiables, évolutifs et réalisés dans les délais prévus,
			\item optimiser la maintenance du logiciel livré.
		\end{itemize}
		
		Afin de pouvoir planifier efficacement le planning de travail en déterminant les dates de réalisations des différentes tâches, nous avons réalisé un diagramme de Gantt, présenté ci-dessous. Il a entre outre permis de visualiser quelles tâches pouvaient être réalisées en même temps et ainsi décider de leur répartition dans le groupe. \\
		Voici les dates des tâches du rétro-planning, le projet est prévu pour durer de novembre environ jusqu'à début janvier.		
		
		%Dates du planning
		\begin{center}
			\includegraphics[scale=0.45]{images/dates_planning.png}
		\end{center}
		
		\newpage
		Le rétro-planning a été prévu pour laisser une petite marge pour châque ainsi qu'un découpage permettant d'effectuer le plus de tâches possibles en paralllèle. \\
		En particulier la réalisation de la base de donnée commence en même temps que l'interface de visualisation, ainsi que l'interface d'administration. \\
		Une semaine est généralement laissée pour la prise en main des outils, et la recherche diverse, elle sert également à produire une première ébauche.
		Une réunion est effectuée en fin de semaine pour présenter l'avancement à l'intégralité du groupe, et pour redonner les orientations pour la semaine suivante. \\
		
		%Rétro-planning
		\begin{center}
			\includegraphics[scale=0.45]{images/retro-planning.png}
		\end{center}
		
		\newpage
		\section{Analyse}
			\subsection{Cas d'utilisation}
			Dans l'optique d'être au plus proche de l'utilisateur et de ses attentes vis-à-vis de l'application, nous avons réalisé des diagrammes de cas d'utilisation vue utilisateur.
			Ces diagrammes permettent de bien définir les fonctionnalités qui doivent être présentes dans le logiciel et de mettre en évidence l'aisance d'utilisation demandée. Ils sont donc un bon fil conducteur durant la phase de développement. 
			Par ailleurs ils sont l'occasion de distinguer et classer les fonctionnalités, ce qui permet par la suite d'établir un schéma de conception et une répartition du travail à réaliser.
				\subsubsection{Visiteur}
					Ce cas d'utilisation nous place dans la peau d'un utilisateur courant de l'application. Pour lui, deux fonctionnalités doivent impérativement être présentes dans l'interface : pouvoir directement effectuer une recherche par mot clef et parcourir librement le thésaurus. 
					Dans la pratique, l'utilisateur pourra parcourir le thésaurus de manière graphique ainsi que par le biais d'une arborescence simulant un explorateur de fichiers. \\
				\includegraphics[scale=0.5]{../analyse-conception/uml/Utilisateur.png}
				\newpage
				\subsubsection{Administrateur : Ajout}
				Ce cas d'utilisation présente toutes les possibilités d'ajout de la part d'un administrateur du thésaurus.
				Il précise en particulier comment doit être effectuée la saisie d'un nouveau concept par exemple via l'interface web.
				Ainsi l'ajout d'un terme préférentiel est obligatoire (c'est ce qui sert d'identifiant du concept, il est donc unique).
				Ce cas d'utilisation est donc essentiel pour visualiser la manière dont sera construite l'interface de saisie. \\
				\paragraph{}
					\includegraphics[scale=0.5]{../analyse-conception/uml/Ajout.png}
					
				\newpage
				\subsubsection{Administrateur : modification}
				Ce cas d'utilisation spécifie également ce que l'on peut changer une fois les données saisies, l'essentiel est surtout l'ajout
				de nouvelles associations, termes ou encore relations entre les concepts. \\
				\paragraph{}
					\includegraphics[scale=0.5]{../analyse-conception/uml/Modification.png}
					
				\newpage
				\subsubsection{Adminstrateur : suppression}
				Une fois encore ce cas d'utilisation permet de décrire la procédure de suppression concrete dans la base de données, 
				d'un élément du thésaurus. En particulier les concepts doivent être reliés à un domaine, ils sont donc supprimés lors de la suppression
				du domaine référent. C'est bien sûr le cas également lors de la suppression d'un concept, qui entraîne la suppression de toutes les associations
				le contenant, ceci dans le but de garder une base de données cohérente. \\	
				\paragraph{}
					\includegraphics[scale=0.5]{../analyse-conception/uml/Suppression.png}
			
			\newpage
			\subsection{Diagramme de classes}
			Un thésaurus est donc composé de plusieurs domaines qui eux-mêmes contiennent des concepts. \\
			Un concept est caractérisé par la présence d'un terme préférentiel qui l'identifie, ainsi que de plusieurs termes équivalents.
			De plus les concepts possèdent des relations entre eux de plusieurs types :
			\begin{itemize}
			\item Association : deux concepts sont associés quand l'un "fait penser à l'autre" par exemple, il y a plusieurs types d'associations possibles,
			ce qui permet d'affiner les relations.
			\item Spécialisation : un concept en spécialise un autre, il est donc plus spécifique.
			\item Généralisation : un concept généralise un autre concept, il est moins précis.
			\end{itemize}
			
			Les relations de spécialisations et généralisations permettent de classifier les concepts entre eux, et ainsi de représenter une arborescence. \\
			Les associations nous permettent quant à elles de de spécifier les relations pour les nommer, et ainsi d'ajouter de la lisibilité au contenu 
			du thésaurus. \\ \\
			
			\includegraphics[scale=0.55]{../analyse-conception/uml/Diagramme-de-classes.png}
	
	\newpage		
	\chapter{Développement}
		\section{Interface de visualisation}
		Avant de commencer à developper l'interface du thésaurus, nous nous sommes dit que c'était là l'occasion de se pencher sur les nouvelles technologies du web.
		C'est pourquoi nous avons choisi d'utiliser exclusivement le HTML5, CSS3, Javascript, PHP et AJAX. \\
		
		Ainsi, nous avons complètement exclu l'utilisation du flash, du java, ou toute autre technologies vieilles et lourdes.
		Cependant, l'utilisation de technologies aussi récentes que l'HTML5 impose que notre application de thésaurus ne soit pas compatible avec tous les navigateurs actuels, mais nous avons préféré choisir ces technologies récentes qui feront le web de demain. \\
			
		Notre interface propose deux méthodes principales de visualisation du thésaurus. La première est basée sur le concept d'explorateur de fichiers et met en évidence l'arborescence des concepts. \\
		La seconde est une visualisation plus graphique qui permet de voir globalement les différents domaines et les concepts qu'ils contiennent. \\
		Par ailleurs, un champs de recherche est disponible sur l'ensemble du site pour les utilisateurs ayant une idée précise de l'information qu'ils recherchent. \\
		\newpage
			\subsection{Statique}
			Notre interface devait donc proposer à l'utilisateur une manière simple et intuitive de parcourir le thésaurus. \\
			Nous en sommes alors très vite arrivés à l'idée de menu déroulant. Un menu ou seraient listés les domaines du thésaurus par ordre alphabétique. Lorsque l'utilisateur clique sur un domaine, la liste des concepts qui le composent seraient alors affichés. L'utilisateur n'a alors qu'à cliquer sur le concept de son choix pour visualiser sa fiche. (Terme préférentiel, termes équivalents, concepts associés, etc...) \\
			\ \\
			Pour réaliser ce menu, nous avons choisis d'utiliser les technologies suivantes : \\
			\begin{itemize}
				\item{\textbf{HTML} : Pour l'affichage des éléments sous forme de liste.}
				\item{\textbf{CSS3 / Javascript} : Pour améliorer l'expérience utilisateur, rendre le menu plus ergonomique, animer le déroulement, etc...}
				\item{\textbf{PHP} : Pour récupérer les données (domaines, concepts, et fiche du concept) à partir du serveur.}
			\end{itemize} \ \\
			
			Grâce à ce menu et à l'affichage des fiches, l'utilisateur a à sa disposition une interface complète lui permettant de parcourir l'intégralité du thésaurus, et ce de manière simple, ergonomique, et intuitive. \\
			Afin de rendre l'expérience utilisateur encore meilleure, nous avons décidé d'ajouter une visualisation graphique du thésaurus. Cette visualisation est une simple alternative à disposition de l'utilisateur lui permettant de parcourir le thésaurus d'une manière différente. Du fait de l'utilisation de technologies très récentes (HTML5/CSS3), nous avons fais en sorte que cette visualisation graphique ne soit pas imposée à l'utilisateur, et qu'il puisse visualiser l'intégralité du thésaurus s'il n'a pas accès à cette visualisation. \\
			\newpage
			\subsection{Dynamique}
			L'interface dynamique est accessible de deux manières. Sur la page d'accueil, l'utilisateur peut choisir de visualiser directement l'ensemble du thésaurus de manière graphique. De plus, l'utilisateur peut choisir de visualiser graphiquement le thésaurus à partir de la fiche de n'importe quel concept. \\
			\ \\
			Si l'utilisateur choisit de visualiser l'ensemble du thésaurus, il aura à sa disposition un graphe composé de bulles représentant les domaines du thésaurus. Lorsque l'utilisateur va cliquer sur un domaine, ses concepts seront affichés, toujours sous formes de bulles. L'utilisateur pourra alors cliquer sur un concept pour accéder à sa fiche détaillée. \\
			On peut voir que cette partie reprend le fonctionnement de l'interface statique. \\
			\ \\
			La différence est davantage significative lors de la visualisation de la fiche d'un des concepts. En effet, en plus des informations classiques (terme préférentiel, termes équivalents), l'utilisateur aura à sa disposition un graphe, ou le concept visualisé sera représenté sous forme de bulle. Le graphe fait apparaitre les concepts associés à celui visualisé, ainsi que les concepts associés à ses concepts associés. Le nom des associacions sera, lui aussi, également affiché. \\
			De cette manière, l'utilisateur pourra parcourir le thésaurus en fonction des concepts associés à ceux qu'il visite, et pourra donc suivre une idée, et non pas simplement consulter le thésaurus en listant les concepts.  \\
			
			\ \\
			Pour la réalisation de cette interface dynamique, nous avons utilisé les technologies suivantes : \\
			\begin{itemize}
				\item{\textbf{HTML5} : Plus précisemment son élément <canvas>, afin de dessiner tout ce qui concerne le graphe. L'élément canvas est un outil puissant de dessin/animation mais difficile à utiliser (seule des fonctions basiques sont à notre diposition : Tracer trait, dessiner carré, courbes de bezier, etc...)}
				\item{\textbf{Javascript} : Pour utiliser l'api du HTML5 et structurer le code présent dans le <canvas> comme la création de classes facilitant le dessin de "bulles" (élément) du graphe, etc...}
				\item{\textbf{AJAX} : Pour pouvoir lire dynamiquement des informations présentes sur le serveur. En effet, le Javascript est un langage exécuté côté client, et le php côté serveur. L'AJAX permet donc d'établir la connexion et de communiquer entre le client et le serveur pour échanger des information stockées dans la base de données par exemple.}
				\item{\textbf{PHP} : Pour gérer les appels AJAX, interroger la base de données, et renvoyer les bonnes informations pour le dessin du graphe.}
			\end{itemize}
			\ \\
			
			De plus, l'utilisateur a accès à l'historique de son parcours sur le graphe pour voir comment il l'a parcouru, et pouvoir revenir à tout moment à un concept précédement visité. \\
			L'utilisateur dispose maintenant de deux manières de parcourir le thésaurus, une statique, et une dynamique, ce qui rend le thésaurus plus attrayant et améliore l'ergonomie ainsi que l'expérience de cet utilisateur. \\
			Nous avons par ailleurs implémenté une fonction de recherche disponible sur l'ensemble du site qui permet à tout moment d'accéder à la fiche d'un concept.
			Cette fonction marche de la forme suivante :
			\begin{itemize}
				\item{Recherche des concepts :} On commence par rechercher si le terme entré correspond à un concept précis, si oui on redirige vers la fiche de ce concept.
				\item{Recherche des termes : } Dans un second temps, on recherche dans les termes équivalents, si la recherche est fructueuse, 
				on remonte vers le terme préférentiel, puis vers le concept.
			\end{itemize}
		\newpage				
		\section{Interface d'administration}
		Parallèlement à l'interface de visualisation, nous avons implémenté une interface d'administration permettant l'édition complète des Thésaurus.\\
		Cette administration est composée de trois parties : ajout, modification et suppression d’éléments à un thésaurus donné.
		Ces trois parties sont elles aussi découpées en trois sections, Domaine, Concept et Association.\\
		D'autre part, cette interface permet l'édition de tous les thésaurus présents dans la base à l'aide d'un sélecteur situé en haut de toute page de l’administration.\\
		Pour réaliser ce menu, nous avons choisi d'utiliser les technologies suivantes : \\
			\begin{itemize}
				\item{\textbf{HTML} : Pour l'affichage des éléments des formulaires.}
				\item{\textbf{CSS3} : Pour la mise en forme des éléments.}
				\item{\textbf{Javascript/Jquery} : Pour l’édition dynamique de liste telle la liste des termes génériques.}
				\item{\textbf{PHP} : Pour la liason avec la BDD. (Pour peupler les élements de l'interface ou l'execution des requêtes par exemple.}
			\end{itemize} \ \\
			\subsection{Ajout}
			Cette section permet donc l'ajout complet de Domaines, Concept ou d'Association, par le biais de différents formulaires.
			Une majeure partie des éléments des différents formulaires est peuplée à l'aide de la base de données, comme par exemple la liste des Domaines auxquels ajouter un concept en cours de création. 
			Le but est de limiter un maximum les risques d'erreurs de saisie de l'utilisateur, et bien évidemment de rendre l'interface plus simple d'utilisation. 
			\subsection{Modification}
			La modification permet deux principales actions, la première est de pouvoir renommer les différents éléments du thésaurus, en cas de faute de frappe par exemple. Deuxièmement, 	elle permet l'ajout ou la suppression de termes synonymes, génériques ou spécifiques aux concepts, et également de changer le paramètre de réflexivité d'une association.
			\subsection{Suppression}
			Enfin, comme son nom l'indique, cette section permet la suppression de domaines, concepts, associations.
			A noter que la suppression d'un Domaine entraîne la suppression de tous ses concepts, et des associations qui en découlent.
			Il en est de même pour la suppression d'un concept ou d'une association réflexive.
			\newpage
		\section{Base de données}
			\subsection{SGBD et environnement de travail}
			La distribution standard de PostgreSQL ne contient que des outils d’administration en ligne de commande. Cependant il existe une grande variété d’outils graphiques (libres, opensource et commerciaux) d’administration et de modélisation des bases de données qui supportent postgresql. Les développeurs d’application peuvent également accéder a PostgreSQL a travers un ensemble riche d’interfaces de programmation.
			\paragraph{}
Postgresql supporte actuellement un nombre important de langages de programmation (dont C, C++, Java, Perl, Tcl, et Python) ainsi que les interfaces JDBC et ODBC.
Pour développer en PostgreSQL nous avons eu le choix d’utiliser une grande variété de langages. Notre choix s’est porté sur pgSQL pour pouvoir profiter des caractéristiques objets du SGBD.
Par ailleurs, comme énoncé parmi les outils utilisés, nous avons réalisé une partie de notre travail grâce à la compilation qu'offre EntrepriseDB, et particulièrement de l'environnement de travail pdAdmin III. C'est un outil graphique permettant la gestion de tout un cluster de serveurs de base de données aux différents niveaux, du niveau serveur (type de connexion, utilisateurs, etc.) au niveau utilisateur/client (domaines, fonctions, etc)
			\paragraph{}
			\includegraphics[width=16cm]{images/pgAdmin1.png}
			\newpage
Il dispose d’un éditeur de requette SQL graphique très souple et élégant. Il permet en outre de réaliser graphiquement des requêtes sur la base.
			\paragraph{}
			\includegraphics[width=16cm]{images/pgAdmin2.png}
			\paragraph{}
La couche Objet qu’offre PstgreSQL nous a permis d’implémenter directement notre modèle concu en UML, en se servant principalement de types utilisateurs et de la spécialisation de types (réellement Héritage de table) sans aucune transformation ou modification.
		\newpage
			\subsection{Outils, méthodes et techniques employées}
				\subsubsection {Création de types utilisateurs}
PostgreSQL offre un large choix de types de données disponibles nativement. Il supporte plusieurs types non standards utiles pour des domaines d’applications specifiques. Les utilisateurs peuvent aussi ajouter de nouveaux types à PostgreSQL™ en utilisant la commande CREATE TYPE , cela comprend :
					\begin{itemize}
							\item{Les types de bases ou TAD} : généralement implémentés en dessous da la couche SQL.
							\item{Les types composites} : représente la structure d'une ligne ou d'un enregistrement. Un type composite est implicitement créé lors de la creation d’une table.
							\item{Types énumérés} : équivalents aux types enum dans de nombreux langages de programmation.
					\end{itemize}
					\paragraph{}
Voir en annexe un complément sur les types et notamment sur la création de types de données.
				\subsubsection {Le type identifiant objet}
En PostgreSQL pour la manipulation des objets, on utilise des identifiants générés automatiquement par le SGBD. Postgres offre une variété de types permettant l’identification de différents objets (appelés “types identifiants objets”).

			\begin{itemize}
				\item{Utilisation des identifiants d'objets :\\}
	Les identifiants d’objets (OID) sont utilisés en interne par PostgreSQL comme clés primaires de différentes tables système. Le type oid représente un identifiant d'objet. Il existe également différents types alias du type oid : regproc, regprocedure, regoper, regoperator, regclass, regtype, regconfig et regdictionary. Les types alias permettent de simplifier la recherche des valeurs OID des objets.
un autre type d'identifiant utilisé par le système est tid, ou identifiant de ligne (tuple). C'est le type de données des colonnes système ctid.

				\item{Colonnes système :\\}
	Chaque table contient plusieurs colonnes système implicitement définies par le système. parmi eux :

				\item{OID :\\}
	L'identifiant objet (object ID) d'une ligne. Cette colonne n'est présente que si la table a été créée en précisant WITH OIDS ou si la variable de configuration default\_with\_oids était activée à ce moment-là. Cette colonne est de type oid (même nom que la colonne).

				\item{Tableoid :\\}
	L' OID de la table contenant la ligne. Cette colonne est particulièrement utile pour les requêtes qui utilisent des hiérarchies d'héritage . Il est, en effet, difficile, en son absence, de savoir de quelle table provient une ligne. tableoid peut être joint à la colonne oid de pg\_class pour obtenir le nom de la table.
			\end{itemize}
\paragraph{}
Remarque : Les OID sont des nombres de 32 bits et sont attribués à partir d'un compteur unique sur le cluster. Dans une base de données volumineuse ou agée, il est possible que le compteur boucle.

				\subsubsection {Spécialisation de types ou héritage de table}

PostgreSQL implante l'héritage des tables, qui peut s'avérer très utile pour les concepteurs de bases de données. Note : SQL:1999 et les versions suivantes définissent une fonctionnalité de spécialisation de type qui diffère par de nombreux aspects.

Dans PostgreSQL, une table peut hériter de zéro à plusieurs autres tables et une requête sur une table s’applique aussi sur  ses tables descendantes. Ce dernier comportement est celui par défaut.
			\newpage
				\subsubsection {Collections}

Grace au type ARRAY,  PostgreSQL permet la gestion des collections de n’importe quelle taille, en offrant une implémentation multidimentionnelle efficace et une librairie de fonctions et d’opérateurs qui permettent une manipulation aisée des objets de types ARRAY dont nous avons profité pleinement.


				\subsubsection {Fonctions}

Pour les types de base (ou TAD) PostgreSQL permet la creation des fonctions et d’opérateurs spécifiques pour ce type , et généralement l’implémentation se fait sous la couche SQL et en Langage C, ce qui limite cette procedure aux developpeurs avancés.

En revanche, PostgreSQL n’offre pas la possiblité de déclarer des méthodes pour les objets de type composite. Il permet cependant de cr"er des fonctions globales polymorphes et permet aussi la surcharge des fonctions.

Dans notre base , l’utilisation des fonctions nous a permis de produire un code modulaire, et ainsi faciliter la communication  avec les applications clients en définissant une interface applicative pour l’accès et l’interaction avec la base.
	
	Donc au final, en se basant sur le modele UML, nous avons traduit chaque classe en tables objet du type de cette classe, et les associations en attributs de type OID ou OID ARRAY selon la cardinalité. Pour la spécialisation en modèle UML nous avons jugé qu'il n'était pas nécessaire d’utiliser l’héritage de tables et avonc donc créé deux tables séparées pour les termes préférentiels et les termes équivalents.
	\newpage	
	\chapter{Résultats}
		\section{Interface}
			\subsection{visualisation}
				\subsubsection{Choix du thésaurus}
				Lorsque l'utilisateur arrive sur notre application web, il est confronté au choix du thésaurus. On a imaginé un système permettant la création de plusieurs thésaurus. Voici la page en question :
					\begin{center}
						\includegraphics[scale=0.3]{images/vindex.png}\\
						Page d'accueil de sélection d'un thésaurus\\
						\ \\
					\end{center}
					On peut voir que dans le bandeau, un bouton est prévu pour l'accès à la partie administration du site. Au centre de la page, on peut voir la liste des thésaurus existants.
				\newpage
				\subsubsection{Page d'accueil d'un thésaurus}
				On imagine ici que l'utilisateur a cliqué sur le thésaurus intitulé "culture". Il arrive alors sur une page d'accueil du thésaurus ainsi choisi :
					\begin{center}
						\includegraphics[scale=0.3]{images/vaccueil.png}\\
						Page principale lors du choix d'un thésaurus\\
						\ \\
					\end{center}
					Sur le bandeau en haut de la page, on peut voir le titre du thésaurus qui par un simple clic, redirigera l'utilisateur sur la page d'accueil du thésaurus. (Celle-ci). On peut trouver également un champ de recherche qui permettra à l'utilisateur d'entrer un mot clé. Ce mot clé sera recherché automatiquement dans les termes préférentiels et les termes équivalents de chacun des concepts. La page du concept ainsi trouvé sera affiché, une erreur sinon. \\
					Sur la gauche, on peut voir la liste des domaines du thésaurus. Par un clic sur l'un des domaines, on voit s'afficher la liste des concepts qui le composent. Lors d'un clic sur l'un de ces concepts, l'utilisateur sera redirigé vers la fiche descriptive de ce concept. \\
					Au centre de la page, on peut voir un descriptif rapide du thésaurus expliquant également sa manière de fonctionner. De plus, l'utilisateur a à sa disposition un bouton lui permettant d'accéder directement à la visualisation graphique de l'intégralité du thésaurus.
				\newpage
				\subsubsection{Visualisation générale}
				Lorsque l'utilisateur clique sur le bouton précédemment cité, il se retrouve face à la visualisation graphique du thésaurus :
					\begin{center}
						\includegraphics[scale=0.3]{images/vvisu.png}\\
						Visualisation graphique de l'ensemble du thésaurus\\
						\ \\
					\end{center}
					Ici sont affichés la liste des domaines. Lors d'un clic, les concepts correspondants sont affichés. Un clic sur un concept redirige directement vers la fiche correspondante.
				\newpage
				\subsubsection{Fiche d'un concept}
				Lorsque l'utilisateur séléctionne un concept, depuis n'importe quel endroit, il est redirigé vers sa fiche descriptive :
					\begin{center}
						\includegraphics[scale=0.3]{images/vconcept.png}\\
						Page descriptive d'un concept du thésaurus\\
						\ \\
					\end{center}
					En plus des éléments précédemments décrits, le centre de la page offre trois éléments à l'utilisateur : \\
					Le fil d'ariane, permettant à l'utilisateur de remonter vers l'historique des concepts qu'il a précédemment visité. \\
					La fiche descriptive indiquant le nom du concept, son terme préférentiel, ses termes équivalents, ainsi que ses termes génériques et spécifiques. \\
					Le graphe indiquant à l'utilisateur quels concepts du thésaurus sont associés au concept qu'il visite, avec la nature de l'association. Ce graphe affiche également la liste des concepts associés sur un deuxième niveau. De plus, celui-ci est interactif et permet à l'utilisateur de parcourir le thésaurus d'une manière plus conviviale.
			\newpage
			\subsection{administration}
			La section administration suit la charte graphique de la page d'accueil où l'on choisit un thésaurus, pour des raisons de cohérence.
			Sur cette page, on peut sélectionner à tout moment le thésaurus que l'on veut éditer, et ensuite par le biais du menu de gauche, accéder aux différents formulaires d'administration présents.  
			\begin{center}
			\includegraphics[scale=0.3]{images/acc.png}\\
			Page d'accueil administration
			\end{center}
			Cette interface comporte donc trois différents formulaires: ajouts, modifications et suppressions, eux mêmes découpés en trois sections: domaines, concepts et associations.
			\subsubsection{Ajouts}
			\begin{center}
				\includegraphics[scale=0.4]{images/Ajout.png}\\
				Section Ajouts \\
				\ \\
			\end{center}
			Ici, on peut ajouter simplement par un formulaire des domaines, concepts, et associations.\\ Un système de listes permet l'édition des termes génériques, termes spécifiques et termes synonymes d'un concept avant sa création, des ajouts et retraits à ces listes sont ensuite possibles via la partie modifications.\\ Le fonctionnement des deux autres parties est très similaire à celle-ci.\\
			\subsubsection{Modifications}
			\begin{center}
				\includegraphics[scale=0.4]{images/modif.png}\\
				Section Modifications\\
				\ \\
			\end{center}
				Dans cette partie, nous pouvons renommer les domaines, concepts et associations, changer le descriptif d'un domaine, et ajouter ou supprimer des termes à un concept.
			\subsubsection{Suppressions}
			\begin{center}
				\includegraphics[scale=0.4]{images/sup.png}\\
				Section Supressions\\
				\ \\
			\end{center}
			Enfin, ce formulaire permet la suppression pure et simple d'un domaine, d'un concept ou d'une association, ainsi que ses dépendances, telles que les concepts associés à un domaine ou les associations d'un concept etc.
		\newpage
		\section{Base de données}
			\subsection{Modèle de la base de données}
			\paragraph{}
		\includegraphics[width=16cm]{images/schemaBase.pdf}
		\newpage
		
			\subsection{Opérations sur la base de données}
		Notre base de données définit une interface applicative qui permet un accès facile depuis n’importe quelle application externe en utilisant plusieurs langages de programmation.
Chacune de nos fonctions peut être appelée avec un certains nombre de paramètre et retourne un résultat, soit une valeur de type scalaire soit un objet complet.

Ainsi pour faire communiquer notre base avec l’interface web, et du fait que PHP et PostgreSQL manipulent tous les deux les objets, des simples appels de fonctions php permettent de  récupérer ou de modifier directement un objet stocké sur la base en passant par les fonctions postgresql.

L’interface de fonctions Postgresql que notre base offre, est découpée en trois catégories.

			\subsubsection{Interrogation}
		Elles permettent d’avoir toutes les informations concernant les objets dans la base, parmi elles on cite : GET\_DOMAINS et GET\_CONCEPTS qui retournent respectivement tous les domaines d’un thesaurus donné et tous les concepts d’un domaine donné. Les fonctions qui retournent les informations concernant un concept donné : GET\_DOMAIN, GET\_TERMVDT, GET\_TERMNVDTS, GET\_TS, GET\_TG, GET\_ASSOCIATIONS. Enfin la plus importante fonction est celle de la recherche FIND qui cherche un mot donné dans toute la base et renvoie le résultat selon le type du mot si il existe dans la base, pour cela elle fait appel aux fonctions : FIND\_IN\_TERMNVDTS, FIND\_IN\_TERMVDTS, FIND\_IN\_CONCEPTS, FIND\_IN\_DOMAINS, et FIND\_IN\_ASSOCIATIONS.

			\subsubsection{Ajouts}
		Les fonctions d’ajout permettent de peupler notre base de données. La principale est ADD\_CONCEPT qui ajoute toutes les données relatives au nouveau concept, puis on a les autres fonctions ADD\_DOMAIN, ADD\_TS, ADD\_TG, ADD\_ASSOCIATION, et ADD\_TERMNVDTS.

			\subsubsection{Modifications - Suppressions}
		Pour les fonction de modifications, on a jugé nécessaire de pouvoir modifier le nom et la description d’un domaine et d’un concept ainsi que le nom des associations. Pour la suppression on peut supprimer n’importe quel objet de notre base, et la suppression des objets en relation avec ce dernier se fait avec les TRIGGERS.
	\newpage	
	\chapter{Conclusion}
		\section{Difficultés rencontrées}
			\paragraph{Gestion de projet \\} Comme dit précédemment, notre groupe résulte de la fusion de deux groupes, n'ayant encore jamais travaillé ensemble. La première difficulté a donc été de partager une vision commune du sujet et de définir une ligne de travail. Chaque groupe ayant déjà refléchi au sujet avant la fusion, il nous a fallu nous réunir et longuement discuter pour trouver cette vision. Suite à quoi il a été plus aisé de se lancer à nouveau pleinement dans la réalisation du projet. \\
	Par ailleurs, ne nous connaissant pas en dehors de ce groupe de travail, les outils de communications cités dans une précédente partie se son révélés indispensables. Cependant, nous pouvons noter que l'utilisation d'un trop grand nombre d'outils de communication se révèle en revanche contre-productif. En effet, devoir vérifier plusieurs plateformes, dont certaines non proposées lors des réunions, représente une perte de temps et de productivité. Un outil unique mais partagé par tous, tel le gestionnaire de versions SVN, se révèle donc au final bien plus intéressant.
			\paragraph{Techniques \\} En dehors des difficultés de travail en groupe, nous avons aussi rencontré certaines difficultés au niveau de la programmation. Ainsi relier la base de données à l'interface grâce à php, ou utiliser Ajax pour éviter de recharger tout une page lors de l'interrogation de la base de données nous ont par exemple posé quelques difficultés. De plus, nous avons voulu utiliser les nouvelles fonctionnalités proposées par le HTML5, notamment grace à sa balise canvas, pour proposer une interface graphique à la fois jolie et intuitive. Peu de bibliothèques ayant pour l'instant été portées pour HTML5, il nous a fallu écrire entièrement certaines fonctions parfois ardues, notamment concernant l'affichage automatique et dynamique des concepts.
			
			Côté bdd, les standards sont un peu lourds et on ne trouve généralement pas d'implémentation qui les respecte exactement, chacun adopte sa vision de l'OR. \\
En utilisant l’objet relationnel nous nous sommes trouvés entre deux paradigmes ; le paradigme valeur et le paradigme pointeur. La limite côté implementation entre les deux est très floue et postgres laisse le choix au programmeur de décider de son utilisation. Il nous a donc parfois été difficile de projecter les notions vues en cours et de bien comprendre les standards sur une implémentation spécifique. De plus PosgreSQL, de part son origine académique et son implémentation ancienne des concepts objets (parfois avant même l’apparition des standards), propose une implémentation bas niveau des notions objets (dont il se sert pour son fonctionement interne). Enfin, les documentation (livres, manuels)  qui traitent de ces notions ne sont pas très explicites et ne présentent générallement que la syntaxe.
\newpage
			\paragraph{Conclusion \\} De manière générale, nous avons réussi à résoudre les difficultés et problèmes rencontrés et cela nous a permi de progresser d'un point de vue technique et de nos connaissances dans différents langages. Ce fut aussi l'occasion d'apprendre à travailler avec un groupe de personnes que nous n'avons pas choisi nous même, tel que ce sera effectivement le cas dans le monde professionnel.
		\section{Apports}
		Ce projet nous a apporté des connaissances sur deux points : la technique et la gestion de projet. \\
		Les aspects techniques commencent déjà par une bonne conception globale, avec des cas d'utilisations rigoureux, et un solide diagramme de classe sur lequel s'appuyer. \\ 
		Concernant la base de données, ce projet nous à apporté beaucoup sur les bases de données en général et particulièrement sur les objet-relationnelles. En effet, l’implémentation bas niveau de PostgreSQL des concepts Objets nous a permis de toucher réellement à ces concepts et de bien comprendre leur intégration dans les bases de données -ce qui n’est en général pas le cas pour les autres SGBDs-. 
Postgres garde l'essentiel du principe de l'objet relationnel, à savoir l’identification objet, les types utilisateurs et les collections du standard. De plus,Postgres s’est developpé au cours du temps suivant les besoins et nécessités pour ne pas surcharger la syntaxe et alourdir les scripts. \\
		Nous avons également appris à nous servir des nouvelles technologies du web, telles que le HTML 5, le CSS 3, ainsi que le Javascript pour l'aspect dynamique, 
		et le dessin. \\
		\ \\
		Sur le plan humain, ce projet effectué à six a été l'occasion d'apprendre à mieux se coordonner et bien sûr travailler en équipe, il a fallu utiliser des outils
		pour se coordonner et également faire des réunions régulières. \\
		
		
		\section{Conclusion du projet}
		Ce projet a donc été très intéressant à travers plusieurs points de vue : tout d'abord il nous a montré une des applications possible de la base de donnée objet via une thématique qui s'y prêtait particulièrement bien.
		De plus il nous a permi de concevoir une application concrète en utilisant les dernières technologies disponibles pour produire une application 
		intuitive et efficace. \\
		Ce projet est donc une réussite pour nous car nous avons réussi à mettre en oeuvre des technologies récentes en gérant un groupe de six personnes tout
		en répartissant le travail. \\		 		
	
	\chapter{Annexes}
%		\section{Annexe A : Les types en Postgres}

		\section{ODL de la base de données}
		Cet annexe propose de donner la représentation ODL de la base de données modélisée pour le projet. Cela permet une vision différente de celle-ci tout en rendant compte des enseignements acquis dans ce langage. \paragraph{}
		class Thesaurus \\
\{ \\
attribute text nomThesaurus;\\
attribute text description;\\
attribute date dateModifTh;\\
relationship set<Domaine> domaines inverse Domaine::duThesaurus;\\
\}
\paragraph{}
class Domaine\\
\{\\
attribute text nomDomaine;\\
attribute text description;\\
attribute date dateModifD;\\
relationship Thesaurus duThesaurus inverse Thesaurus::domaines;\\
relationship set<Concept> concepts inverse Concept::duDomaine\\
\}
\paragraph{}
class Concept\\
\{\\
	attribute Nom Text,\\
	attribute DateModifC Date,\\
	relationship Domaine duDomaine inverse Domaine::concepts;\\
	relationship TermePreferentiel termePref inverse Termepreferentiel::duConcept\\
	relationship set<Concept> conceptsSpecifiques inverse Concept::conceptsGeneriques;\\
	relationship set<Concept> conceptsGeneriques inverse Concept::conceptsSpecifiques;\\
	relationship set<Association> associations; \\
\}\\
\paragraph{}
class Termepreferentiel\\
\{\\
	attribute NomTP Text ;\\
	relationship Concept duConcept inverse Concept::conceptsSpecifiques termePref;\\
	relationship set<TermeEquivalent> termeEquivalents inverse TermeEquivalent::termePrefAssocie;\\
\}\\
\paragraph{}
class TermeEquivalent\\
\{\\
	attribute NomTE Text,\\
	relationship Termepreferentiel termePrefAssocie inverse Termepreferentiel::termeEquivalents;\\
\}\\
\paragraph{}
class Association\\
\{\\
	attribute NomAssoc Text;\\
	attribute Reflexive BOOLEAN;\\
	relationship Concept conceptA ;\\
	relationship Concept conceptB;\\
\}\\
	
\end{document}

